#include <iostream>


class Base
{
public:
    virtual void show()
    {
        std::cout<<"base"<<std::endl;
    }
};

class Derived : public Base
{
public:
    virtual void show()
    {
        std::cout<<"derived"<<std::endl;
    }
};


int main()
{
    //静态转化
    //支持基础数据类型转换
    //不同类型的指针不允许转换
    //支持void *和其他类型的指针的相互转换
    //可以用于父子类之间的转换，但是不会安全检查
    // int a = 10;
    // // int *p = &a;
    // // void *c = static_cast<void *>(p);
    // void *p = &a;
    // int *c = static_cast<int *>(p);

    //动态转换
    //用于父子类之间的转换
    //当向下转型不安全时，会返回空指针
    //如果没有虚函数，向下转型直接编译失败
    // Base *b = new Derived;
    // //b->show();
    // Derived *d = dynamic_cast<Derived*>(b);
    // if(d == nullptr)
    // {
    //     std::cout<<"空指针"<<std::endl;
    // }
    // else
    //     d->show();
    
    //常量转换
    // const int a = 20;
    // int *b = const_cast<int*>(&a);

    // 相当于强制类型转换
    // int a = 20;
    // double *b = reinterpret_cast<double*>(a);
    
    return 0;
}